package io.github.echarts.model.context;

/**
 * 图表类型枚举
 * <p>
 * 定义ECharts支持的各种图表类型。
 * 用于配置上下文中，指示当前处理的图表类型，
 * 以便为不同类型的图表应用适当的默认值和布局策略。
 * </p>
 */
public enum ChartType {
    /**
     * 未知类型
     */
    UNKNOWN,
    
    /**
     * 柱状图
     */
    BAR,
    
    /**
     * 折线图
     */
    LINE,
    
    /**
     * 饼图
     */
    PIE,
    
    /**
     * 散点图
     */
    SCATTER,
    
    /**
     * 面积图
     */
    AREA,
    
    /**
     * 雷达图
     */
    RADAR,
    
    /**
     * 仪表盘
     */
    GAUGE,
    
    /**
     * 漏斗图
     */
    FUNNEL,
    
    /**
     * 热力图
     */
    HEATMAP,
    
    /**
     * 树状图
     */
    TREE,
    
    /**
     * 矩形树图
     */
    TREEMAP,
    
    /**
     * K线图（蜡烛图）
     */
    CANDLESTICK,
    
    /**
     * 箱线图
     */
    BOXPLOT,
    
    /**
     * 平行坐标系
     */
    PARALLEL,
    
    /**
     * 桑基图
     */
    SANKEY,
    
    /**
     * 图形图
     */
    GRAPH,
    
    /**
     * 混合图表类型（包含多种系列类型）
     */
    MIXED;
    
    /**
     * 从系列类型字符串推断图表类型
     * 
     * @param seriesType 系列类型字符串
     * @return 对应的图表类型，如果无法识别则返回UNKNOWN
     */
    public static ChartType fromSeriesType(String seriesType) {
        if (seriesType == null) {
            return UNKNOWN;
        }
        
        switch (seriesType.toLowerCase()) {
            case "bar":
                return BAR;
            case "line":
                return LINE;
            case "pie":
                return PIE;
            case "scatter":
                return SCATTER;
            case "area":
            case "line-area":
                return AREA;
            case "radar":
                return RADAR;
            case "gauge":
                return GAUGE;
            case "funnel":
                return FUNNEL;
            case "heatmap":
                return HEATMAP;
            case "tree":
                return TREE;
            case "treemap":
                return TREEMAP;
            case "candlestick":
                return CANDLESTICK;
            case "boxplot":
                return BOXPLOT;
            case "parallel":
                return PARALLEL;
            case "sankey":
                return SANKEY;
            case "graph":
                return GRAPH;
            default:
                return UNKNOWN;
        }
    }
} 